package designpattern.Template;

/**
 * @author cyt
 * @create 2020-08-16 11:58
 */

public class Test {

    /**
     * 定义一个操作中的算法的骨架，而将一些步骤延迟到子类中，使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
     * <p>
     * 模板方法是一种高层定义骨架，底层实现细节的设计模式，适用于流程固定，但某些步骤不确定或可替换的情况。
     */

    public static void main(String[] args) {
        AbstractSetting setting1 = new LocalSetting();
        System.out.println("abstractclass.test = " + setting1.getSetting("test"));
        System.out.println("abstractclass.test = " + setting1.getSetting("test"));

        /**
         * 可见，模板方法的核心思想是：父类定义骨架，子类实现某些细节。
         *
         * 为了防止子类重写父类的骨架方法，可以在父类中对骨架方法使用final。对于需要子类实现的抽象方法，一般声明为protected，使得这些方法对外部客户端不可见。
         *
         * Java标准库也有很多模板方法的应用。在集合类中，AbstractList和AbstractQueuedSynchronizer都定义了很多通用操作，子类只需要实现某些必要方法。
         *
         *
         */
        AbstractSetting setting2 = new RedisSetting();
        System.out.println("redis = " + setting2.getSetting("redis"));
        System.out.println("redis = " + setting2.getSetting("redis"));
    }
}
